package com.car.controller;

import com.car.pojo.Result;
import com.car.pojo.Feedback;
import com.car.pojo.PageResult;
import com.car.service.FeedbackService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;

/**
 * 投诉建议控制器
 */
@Slf4j
@RequestMapping("/feedbacks")
@RestController
public class FeedbackController {

    @Autowired
    private FeedbackService feedbackService;

    /**
     * 分页查询投诉建议列表（管理员端）
     * @param params 查询参数
     * @return 投诉建议列表
     */
    @GetMapping
    public Result page(@RequestParam Map<String, Object> params) {
        log.info("分页查询投诉建议: {}", params);
        PageResult<Feedback> pageResult = feedbackService.page(params);
        return Result.success(pageResult);
    }

    /**
     * 新增投诉建议（用户端）
     * @param feedback 投诉建议信息
     * @return 操作结果
     */
    @PostMapping
    public Result save(@RequestBody Feedback feedback) {
        log.info("新增投诉建议: {}", feedback);
        try {
            feedbackService.save(feedback);
            return Result.success("提交成功");
        } catch (Exception e) {
            log.error("提交投诉建议失败", e);
            return Result.error("提交失败");
        }
    }

    /**
     * 获取投诉建议详情
     * @param id 投诉建议ID
     * @return 投诉建议详情
     */
    @GetMapping("/{id}")
    public Result getInfo(@PathVariable Integer id) {
        log.info("根据ID查询投诉建议详情: {}", id);
        Feedback feedback = feedbackService.getInfo(id);
        if (feedback != null) {
            return Result.success(feedback);
        } else {
            return Result.error("投诉建议不存在");
        }
    }
    
    /**
     * 更新投诉建议状态（管理员端）
     * @param params 更新参数
     * @return 操作结果
     */
    @PutMapping
    public Result update(@RequestBody Map<String, Object> params) {
        log.info("更新投诉建议状态: {}", params);
        try {
            feedbackService.update(params);
            return Result.success("状态更新成功");
        } catch (IllegalArgumentException e) {
            return Result.error(e.getMessage());
        } catch (Exception e) {
            log.error("更新投诉建议状态失败", e);
            return Result.error("状态更新失败");
        }
    }
    
    /**
     * 查询所有投诉建议
     */
    @GetMapping("/list")
    public Result list() {
        log.info("查询所有投诉建议数据");
        List<Feedback> feedbackList = feedbackService.list();
        return Result.success(feedbackList);
    }
}